/*
Proxy 用于修改某些操作的默认行为
Proxy 可以理解成，在目标对象之前架设一层拦截,外界对该对象的访问，都必须先通过这层拦截，因此提供了一种机制，可以对外界的访问进行过滤和改写。
Proxy 这个词的原意是代理，用在这里表示由它来代理某些操作，可以译为代理器
*/

/*
wang妈妈 帮 wang老师 找对象
*/
const wang={
  name: 'wanglaoshi',
  age: 29,
  height:165,
  boyfriend:{}
}

const wangMama = new Proxy(wang, {
  get(target/*即是Proxy第一个参数接受的*/, key) {
    if (key == 'age') {
      return wang.age - 1
    } else if (key == 'height') {
      return wang.height - 5
    }
    return target[key]
  },
  set(target, key, val) {
    if (key == 'boyfriend') {
      const boyfriend = val
      if (boyfriend.age > 40) {
        throw new Error('太老')
      } else if (boyfriend.salary < 20000) {
        throw new Error('太穷')
      } else {
        target[key] = val
        return true
      }
    }
    return true
  }
})

console.log(wangMama.age)
console.log(wangMama.height)

wangMama.boyfriend={
  age: 41,
  salary:3000
}
